PHP no requiere (o soporta) la definición explícita de tipos en la declaración de variables; el tipo de una variable es determinado por el contexto en el que la variable es usada. Lo que quiere decir que si asigna un valor tipo string a la variable $var , $var se convierte en una cadena. Si luego asigna un valor integer a $var , ésta se convierte en un entero.
Un ejemplo de la conversión automática de tipos de PHP es el operador de adición '+'. Si cualquiera de los operandos es un valor float, entonces ambos operandos son evaluados como flotantes, y el resultado será un flotante. De lo contrario, los operandos serán interpretados como enteros, y el resultado será también un entero. Note que esto no modifica los tipos de los operandos como tal; el único cambio está en la forma como los operandos son evaluados y en el tipo de la expresión misma.
<?php
$foo = "0"; // $foo es una cadena (ASCII 48)
$foo += 2; // $foo es ahora un entero (2)
$foo = $foo + 1.3; // $foo es ahora un flotante (3.3)
$foo = 5 + "10 Cerditos"; // $foo es entero (15)
$foo = 5 + "10 Cerdos"; // $foo es entero (15)
?>
Si los dos últimos ejemplos lucen extraños, consulte Conversión de cadenas a números.
Para forzar a que una variable sea evaluada como de cierto tipo, consulte la sección sobre Moldeamiento de tipos. Si desea cambiar el tipo de una variable, vea la función settype().
Para probar cualquiera de los ejemplos en esta sección, use la función var_dump().
Note: El comportamiento de una conversión automática a matriz no se encuentra definido en el momento.
Asimismo, ya que PHP soporta el uso de índices en cadenas por medio de desplazamientos usando la misma sintaxis que la indexación de matrices, el siguiente ejemplo permanece válido para todas las versiones de PHP:
<?php
$a = 'carro'; // $a es una cadena
$a[0] = 'b'; // $a sigue siendo una cadena
echo $a; // barro
?>Vea la sección titulada Acceso a cadenas por caracter para más información.
El moldeamiento de tipos en PHP funciona de forma muy similar a como ocurre en C: el nombre del tipo deseado es escrito entre paréntesis antes de la variable a ser moldeada.
<?php
$foo = 10; // $foo es un entero
$bar = (boolean) $foo; // $bar es un booleano
?>
Los moldeamientos permitidos son:
El moldeamiento (binary) y el soporte del prefijo b fueron agregados en PHP 5.2.1
Note que las tabulaciones y los espacios son permitidos al interior de los paréntesis, así que las siguientes expresiones son funcionalmente equivalentes:
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>
Moldeamiento de cadenas literales y variables a cadenas binarias:
<?php
$binario = (binary)$cadena;
$binario = b"cadena binaria";
?>
Note: En lugar de moldear una variable a cadena, puede también rodear la variable con comillas dobles.
<?php
$foo = 10; // $foo es un entero
$cad = "$foo"; // $cad es una cadena
$fst = (string) $foo; // $fst es también una cadena
// Esto imprime "son lo mismo"
if ($fst === $cad) {
echo "son lo mismo";
}
?>
Puede que no sea obvio qué sucede exactamente cuando se moldea entre ciertos tipos. Para más información, consulte las secciones: